home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Other Langs / mpw yacc ƒ src / main.c < prev    next >
C/C++ Source or Header  |  1989-11-19  |  2KB  |  158 lines

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include "dep.h"
  4. #include "defs.h"
  5. #include "files.h"
  6. #include "state.h"
  7. #include "symtab.h"
  8. #include "tokens.h"
  9.  
  10. extern tidy();
  11. extern aborted();
  12.  
  13. char dflag;
  14. char lflag;
  15. char tflag;
  16. char vflag;
  17.  
  18. char *prefix = "y";
  19. char *myname = "yacc";
  20.  
  21. int lineno;
  22. YYSTYPE yylval;
  23.  
  24.  
  25. usage()
  26. {
  27.     fprintf(stderr, "usage: %s [-dltv] [-b prefix] filename\n", myname);
  28.     exit(1);
  29. }
  30.  
  31.  
  32. getargs(argc, argv)
  33. int argc;
  34. char *argv[];
  35. {
  36.     register int i;
  37.     register char *s;
  38.  
  39.     if (argc > 0) myname = argv[0];
  40.     for (i = 1; i < argc; ++i)
  41.     {
  42.     s = argv[i];
  43.     if (*s != '-') break;
  44.     switch (*++s)
  45.     {
  46.     case '\0':
  47.         input_file = stdin;
  48.         if (i + 1 < argc) usage();
  49.         return;
  50.  
  51.     case '_':
  52.         ++i;
  53.         goto no_more_options;
  54.  
  55.     case 'b':
  56.         if (*++s || ++i >= argc) usage();
  57.         prefix = argv[i];
  58.         continue;
  59.  
  60.     case 'd':
  61.         dflag = 1;
  62.         break;
  63.  
  64.     case 'l':
  65.         lflag = 1;
  66.         break;
  67.  
  68.     case 't':
  69.         tflag = 1;
  70.         break;
  71.  
  72.     case 'v':
  73.         vflag = 1;
  74.         break;
  75.  
  76.     default:
  77.         usage();
  78.     }
  79.  
  80.     for (;;)
  81.     {
  82.         switch (*++s)
  83.         {
  84.         case '\0':
  85.         goto end_of_option;
  86.  
  87.         case 'd':
  88.         dflag = 1;
  89.         break;
  90.  
  91.         case 'l':
  92.         lflag = 1;
  93.         break;
  94.  
  95.         case 't':
  96.         tflag = 1;
  97.         break;
  98.  
  99.         case 'v':
  100.         vflag = 1;
  101.         break;
  102.  
  103.         default:
  104.         usage();
  105.         }
  106.     }
  107. end_of_option:;
  108.     }
  109.  
  110. no_more_options:;
  111.     if (i + 1 < argc) usage();
  112.     input_file_name = argv[i];
  113. }
  114.  
  115.  
  116. int
  117. main(argc, argv)
  118. int argc;
  119. char *argv[];
  120. {
  121.   register int c;
  122.  
  123.   (void) signal(SIGINT, aborted);
  124.  
  125. #ifdef MACINTOSH
  126.   parser_file_name = argv[0];
  127. #ifdef    AZTECC
  128.     defSpin(0x20);
  129. #endif
  130. #endif 
  131.  
  132.  
  133.   getargs(argc, argv);
  134.   openfiles();
  135.   tabinit();
  136.   initialize_lex();
  137.   reader();
  138.   set_derives();
  139.   set_nullable();
  140.   generate_states();
  141.   optim();
  142.   lalr();
  143.   make_parser();
  144.   initialize_conflicts();
  145.   if (vflag)
  146.     verbose();
  147.   output();
  148.   fclose(action_file);
  149.   action_file = fopen(action_file_name, "r");
  150.   c = getc(action_file);
  151.   while (c != EOF)
  152.     {
  153.       putc(c, output_file);
  154.       c = getc(action_file);
  155.     }
  156.   tidy();
  157. }
  158.